// 1. 启动一个后端服务
const express = require("express");
const exApp = express();
const bodyParser = require("body-parser");
const cors = require("cors");

// 1.2 配置post请求
exApp.use(bodyParser.urlencoded({ extended: true }));
exApp.use(bodyParser.json());
// 1.3 开启跨域设置
exApp.use(cors());
// 1.4 开启后端服务端口
exApp.listen(3000, () => console.log("http://localhost:3000"));

// 2. 开启数据库
const mongoose = require("mongoose");
// 2.1 连接数据库
const ip = "mongodb://127.0.0.1:27017/songyu";
const monApp = mongoose.createConnection(ip, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});
// 2.2 监听数据库反应
monApp.on("open", () => console.log("数据库开启了"));
monApp.on("err", () => console.log("数据库出错了"));
// 2.3 创建规则
const Schema = new mongoose.Schema(
  {
    username: "string",
    // 规则--强制要求配置
    password: {
      type: mongoose.Schema.Types.Mixed, // 不确定值类型：泛型
      // 强制必须要有该字段
      required: [true, "必须有内容"],
      // 默认值
      // default: 123456,
      // 将值转成小写
      lowercase: true,
      validate: (val) => {
        if (val.length < 6) {
          return false;
        } else {
          return true;
        }
      },
    },
  },
  // 强制给集合命名
  { collection: "users" }
);
// 2.4 创建或选择集合 || 集合的名字必须加S，
// 不加它会给你自动加上，结果就是咱们获取不到真实的集合
const UseModel = monApp.model("users", Schema);
// 3. 插入数据
const create = () => UseModel.create([{ username: "三毛" }]);
create()
  .then(
    (res, err) => {
      console.log("读取：", res);
    },
    (err) => {
      console.log("错误1：", err.message);
    }
  )
  .catch((err) => {
    console.log("错误2：", err.message);
  });

const find = () =>
  UseModel.find({}).then((res) => {
    console.log(res);
  });
// 5. 更新的操作
Schema.add({
  age: "number",
});
// UseModel.updateMany(
//   { username: "123" },
//   {
//     age: 18,
//   }
// ).then((res) => {
//   console.log(res);
//   find();
// });

// 4. 删除操作
// UseModel.deleteMany({}).then((res) => {
//   console.log(res);
//   find();
// });

// remove是删除全部，
// 有查询条件则删除全部匹配的，没有查询条件就是清空了集合
// 插入数据后，该集合就被创建了，即便是清空了集合数据，集合不会消失
// UseModel.remove().then((res) => {
//   console.log(res);
// });